/**
 * 309. 最佳买卖股票时机含冷冻期
 * https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/
 */

/**
 * @param {number[]} prices
 * @return {number}
 */
function maxProfit(prices) {
  const dp = new Array(prices.length);
  for (let i = 0; i < prices.length; i += 1) {
    dp[i] = new Array(3).fill(0);
    // 0 - 当前继续持有或新买入股票
    // 1 - 当前处于冷冻期
    // 2 - 当前处于空闲期
  }
  dp[0][0] = -prices[0];
  for (let i = 1; i < prices.length; i += 1) {
    dp[i][0] = Math.max(
      dp[i - 1][0], // 当前继续持有，没有卖出所以不产生收益，继承昨天持有时的买入价
      dp[i - 1][2] - prices[i], // 当前通过买入持有，昨天处于空闲期时进行买入
    );
    dp[i][1] = dp[i - 1][0] + prices[i]; // 当前把股票卖出
    dp[i][2] = Math.max( // 当前处于空闲期的要求是昨天不持有股票
      dp[i - 1][1],
      dp[i - 1][2],
    );
  }
  return Math.max(dp[prices.length - 1][1], dp[prices.length - 1][2]);
}

console.log(maxProfit([1, 2, 3, 0, 2]) === 3);
console.log(maxProfit([6, 1, 3, 2, 4, 7]) === 6);
console.log(maxProfit([2, 1]) === 0);
